/*!
 * Apollo JavaScript Library v1.0.0
 *
 *
 * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
 */
function HashMap() {
     /** Map 大小 **/
     var size = 0;
     /** 对象 **/
     var entry = new Object();
     
     /** 存 **/
     this.put = function (key , value)
     {
         if(!this.containsKey(key))
         {
             size ++ ;
         }
         entry[key] = value;
     }
     
     /** 取 **/
     this.get = function (key)
     {
         if( this.containsKey(key) )
         {
             return entry[key];
         }
         else
         {
             return null;
         }
     }
     
     /** 删除 **/
     this.remove = function ( key )
     {
         if( delete entry[key] )
         {
             size --;
         }
     }

	 this.clear = function ()
	{
		entry = new Object();
		size = 0;
	}
     
     /** 是否包含 Key **/
     this.containsKey = function ( key )
     {
         return (key in entry);
     }
     
     /** 是否包含 Value **/
     this.containsValue = function ( value )
     {
         for(var prop in entry)
         {
             if(entry[prop] == value)
             {
                 return true;
             }
         }
         return false;
     }
     
     /** 所有 Value **/
     this.values = function ()
     {
         var values = new Array(size);
         for(var prop in entry)
         {
             values.push(entry[prop]);
         }
         return values;
     }
     
     /** 所有 Key **/
     this.keys = function ()
     {
         var keys = new Array(size);
         for(var prop in entry)
         {
             keys.push(prop);
         }
         return keys;
     }
     
     /** Map Size **/
     this.size = function ()
     {
         return size;
     }
}

/**
 * 格式化日期
 * @param format 日期格式,如 yyyy-MM-dd
 * @returns {String}
 */
Date.prototype.format = function(format) // author: meizz
{ 
  var o = { 
    "M+" : this.getMonth()+1, // month
    "d+" : this.getDate(),    // day
    "h+" : this.getHours(),   // hour
    "m+" : this.getMinutes(), // minute
    "s+" : this.getSeconds(), // second
    "q+" : Math.floor((this.getMonth()+3)/3),  // quarter
    "S" : this.getMilliseconds() // millisecond
  }; 
  if(/(y+)/.test(format)) format=format.replace(RegExp.$1, 
    (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
  for(var k in o)if(new RegExp("("+ k +")").test(format)) 
    format = format.replace(RegExp.$1, 
      RegExp.$1.length==1 ? o[k] : 
        ("00"+ o[k]).substr((""+ o[k]).length)); 
  return format; 
};

/**
 * 根据指定格式解析日期
 * @param date  日期字符串
 * @param format 格式字符串
 * @returns {Date}
 */
function parseDate(date,format){
 var result=new Date();
 if(/(y+)/.test(format))
  result.setFullYear(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 if(/(M+)/.test(format))
  result.setMonth(parseInt(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length),10)-1);
 if(/(d+)/.test(format))
  result.setDate(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 if(/(h+)/.test(format))
  result.setHours(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 if(/(m+)/.test(format))
  result.setMinutes(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 if(/(s+)/.test(format))
  result.setSeconds(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 if(/(S+)/.test(format))
  result.setMilliseconds(date.substring(format.indexOf(RegExp.$1),format.indexOf(RegExp.$1)+RegExp.$1.length));
 return result;
}

function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
}

function getSource(url){
	var matchs = url.match(/#([^&]*&)*source=([^&]+)/i),
	source = matchs ? matchs[2] : "*";
	return decodeURIComponent(source);
}

function forceJump(url) {
	var rid = (new Date()).getTime();
	window.open( url + "&rid=" + rid);
}

function hightlight(content, keyword) {
	var newStr = content.replace(new RegExp(keyword,"gm"), "<span class='cRed'>" + keyword + "</span>");
	return newStr;
}

function multiReplace(str) {
	var hash = {
    '&(?!#?\\w+;)' :'&amp;',
    '"([^"]*)"' : '“$1”',
    '<' : '&lt;' ,
    '>' : '&gt;',
    '…' : '&hellip;',
    '“' : '&ldquo;' ,
    '”' : '&rdquo;' ,
    '‘' : '&lsquo;' ,
    '’' : '&rsquo;' ,
    '—' : '&mdash;',
    '–' : '&ndash;'
	};
    for (var key in hash ) {
       str = str.replace( new RegExp( key, 'g' ), hash[ key ] );
    }
    return str;
};

function pageName()
{
    var a = location.href;
    var b = a.split("/");
    var c = b.slice(b.length-1, b.length).toString(String).split(".");
    return c.slice(0, 1);
}